import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class StreamCollector {
    private static List<String> books = new ArrayList<>();

    static {
        books.add("Java从入门到精通");
        books.add("Java核心编程");
        books.add("数据结构与算法");
        books.add("C++项目实战");
        books.add("算法导论");
        books.add("微服务实现原理");
        books.add("基于Hadoop的日志分析");
    }

    /**
     * 获取书名长度大于9的书籍列表
     */
    public static void toList() {
        List<String> result = books.stream()
                .filter(ele -> ele.length() > 9)
                .collect(Collectors.toList());
        result.forEach(System.out::println);
    }

    /**
     * 按书名长度分组显示
     */
    public static void group() {
        // Map<分组条件，结果集合>
        Map<Object, List<String>> result = books.stream()
                .collect(Collectors.groupingBy(
                        String::length
                ));
        result.forEach((key, value) -> System.out.println(key + " -> " + value));
    }

    /**
     * 分区，可以说是group的一个特例，partition是将流分为2部分，符合条件的和不符合条件的
     */
    public static void partition() {
        Map<Boolean, List<String>> result = books.stream()
                .collect(Collectors.partitioningBy(ele -> ele.contains("Java")));
        result.forEach((key, value) -> System.out.println(key + " -> " + value));
    }

    public static void main(String[] args) {
        toList();
        group();
        partition();
    }
}
